# -*- coding: UTF-8 -*- #
"""
-------真正的勇士， 敢于直面惨淡的Warning、 敢于正视淋漓的Error-----
@author : 贾鹏博
@file : 21、自动化测试架构优化.py
@time : 2022/6/11 21:25
"""

"""
打造测试框架的需求与价值：
    1、领域模型适配 ： 封装业务的实现，实现业务管理
    2、提高效率 ； 降低用例维护成本 ， 提高执行效率 （健壮性和容错性，添加截图等）
    3、增强功能 ： 解决已有框架不满足的情况
自动化框架应具备的功能：
    1、支持管理用例，运行用例
    2、支持查找元素/定位元素，对元素/页面进行操作（点击、滑动、输入等）
    3、支持生成测试报告
    4、能够实现功能的复用
    5、当页面有异常弹框的时候，可以进行有效的处理
    6、当用例失败时，需要添加失败时的日志，截图等信息。放在测试报告中
    7、多设备并发
    8、支持多平台
自动化测试框架实现：
    1、管理用例,运行用例 pytest
    2、查找元素 ： Appium
    3、测试报告 ： Allure
    4、功能复用 ： PO实现
    5、异常弹框 ： try except 异常处理
    6、失败时的日志，截图 ： 保存截图、日志到报告
    7、多设备并发 ： selenium grid
    8、平台化 ： VUE + FLASK/Django
项目结构 :
    1、用例层 ： 测试用例集  添加联系人用例  删除联系人用例  打卡用例
    2、业务层 QiYeWeiXin_PO(接口) : Page封装  首页PO 通讯录PO  添加联系人PO 编辑联系人PO
    3、基础层 ： 基础 driver 封装 、 查找封装 、 操作封装（发送、点击、获取 text 值） 、 领域模型
    4、框架层 ： yaml 解析 、 日志收集 、 数据驱动 、 ini配置文件 、 用例数据 、 报告管理

为什么要封装框架 :
    1、复用
    2、平台化 ->  用例管理、用例调度、用例执行（在前端平台解析配置文件，在后端框架层完成文件执行） 
    
增强项目 ：
    1、异常处理 -> try expect
    2、日志记录 ->  报告 ：1、运行时的日志记录  2 、错误日志记录（DEBUG、INFO、WARNING、ERROR、CRITICAL）
    3、报告生成  -> allure、pytest-html : 异常日志、异常截图、测h用例步骤、测试描述、bug/issue 关联 、 用例分类（feature、story、step）
    4、数据驱动  -> 测试数据的数据驱动、配置文件的数据驱动、关键字的数据驱动
"""

"""
封装一个装饰器，在查找方法上添加这个装饰器
装饰器功能的实现 ：
    1、在查找元素的时候，当未找到元素时会捕获异常，同时遍历黑名单中的组件，
    如果有其中一个，并这个组件点掉，重新查找，直到找到这个元素，或者达到最大值查找次数
    2、如果达到最大值查找次数，则抛出 NoSuchElementException
"""
